﻿Option Explicit On
Option Strict On

Imports System.Data
Imports System.Data.OleDb

'Documentación XML
''' <summary>
''' Esta clase almacena los atributos y métodos 
''' para gestionar los datos de los usuarios.
''' </summary>
''' <author> Jerón Fernández Caballero Rico</author>
''' <author> Daniel Morato Baudi</author>

Public Class Usuario

    'Atributos
    Private _Nombre As String
    Private _Password As String
    Private _Rol As Integer

    'Constructores
    Public Sub New()

        Me._Nombre = ""
        Me._Password = ""
        Me._Rol = 0

    End Sub

    'Documentación XML
    ''' <param name="NombreUsuario">(String) Nombre utilizado para acceder al programa.</param>
    ''' <param name="Password">(String) Contraseña utilizada para acceder al programa.</param>
    ''' <param name="MiRol">(Integer) Rol que desempeñara el usuario en el programa.</param>
    Public Sub New(ByVal NombreUsuario As String, ByVal Password As String,
                   ByVal MiRol As Integer)

        Me._Nombre = NombreUsuario
        Me._Password = Password
        Me._Rol = MiRol

    End Sub

    ''' <param name="UsuarioBorrar">(Usuario) Usuario que insertaremos de la base de datos.</param>
    Public Sub InsertarEnBD(ByVal UsuarioBorrar As Usuario)
        Dim permisos As Integer = 0
        Dim Mensaje As String

        If UsuarioBorrar.Rol = 1 Then
            permisos = 2
        End If
        If UsuarioBorrar.Rol = 2 Then
            permisos = 1
        End If

        Dim MiBD As New BaseDatos
        Dim ConsultaUsuario As String
        ConsultaUsuario = "INSERT INTO Usuario (Id_Permisos, Nombre, Contraseña, " & _
                          "Rol) VALUES ('" & permisos & "', '" & UsuarioBorrar._Nombre & "', '" & _
                          UsuarioBorrar._Password & "', '" & _
                          UsuarioBorrar._Rol & "')"

        Mensaje = MiBD.Insertar(ConsultaUsuario)
        MsgBox(Mensaje)
        FormEntrada.tsp_lb_Mensajes.Text = Mensaje
        FormEntrada.tsp_lb_Mensajes.Visible = True
    End Sub

    ''' <param name="UsuarioBorrar">(String) Usuario que borraremos de la base de datos.</param>
    Public Sub BorrarDeBD(ByVal UsuarioBorrar As String)

        Dim MiBD As New BaseDatos
        MiBD.Borrar("DELETE * FROM Usuario WHERE Nombre = '" & UsuarioBorrar & "'")

    End Sub

    ''' <param name="CampoBuscado">(String) Campo que queremos obtener de la base de datos.</param>
    ''' <param name="Filtro">(Opcional)(String) Filtro que aplicaremos a nuestra búsqueda.</param>
    ''' <returns>(OleDbDataReader)  Devuelve un objeto DataReader con los datos leídos.</returns>
    Public Function ConsultarBD(ByVal CampoBuscado As String, Optional ByVal Filtro As String = "") As OleDbDataReader

        Dim MiBD As New BaseDatos
        Dim DatosLeidos As OleDbDataReader

        If Filtro.Length > 0 Then
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Usuario WHERE " & Filtro)
        Else
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Usuario")
        End If

        Return DatosLeidos

    End Function

    'Destructores
    Public Sub Dispose()

        Me._Nombre = ""
        Me._Password = ""
        Me._Rol = Nothing

    End Sub
    Protected Overrides Sub Finalize()

        Me._Nombre = ""
        Me._Password = ""
        Me._Rol = Nothing

    End Sub

    'Get / Set
    Public Property NombreUsuario As String
        Get
            Return Me._Nombre
        End Get
        Set(ByVal value As String)
            Me._Nombre = value
        End Set
    End Property
    Public Property Password As String
        Get
            Return Me._Password
        End Get
        Set(ByVal value As String)
            Me._Password = value
        End Set
    End Property
    Public Property Rol As Integer
        Get
            Return Me._Rol
        End Get
        Set(value As Integer)
            Me._Rol = value
        End Set
    End Property
End Class